import xlwings as xw
import sys
import os

def convert_xls_to_xlsm(xls_file):
    """
    将指定的 .xls 文件另存为同名的 .xlsm 文件，并自动处理可能的提示框。

    参数:
        xls_file (str): 输入的 .xls 文件路径。
    """
    # 创建 Excel 应用程序实例
    app = xw.App(visible=False)  # 不显示 Excel 界面
    app.display_alerts = False   # 禁用所有提示框
    app.screen_updating = False   # 禁用屏幕更新以提高性能

    try:
        # 打开 .xls 文件
        wb = app.books.open(xls_file)

        # 生成 .xlsm 文件名
        xlsm_file = xls_file.rsplit('.', 1)[0] + '.xlsm'

        # 另存为 .xlsm 文件
        wb.save(xlsm_file)

        print(f"文件 {xls_file} 已成功转换为 {xlsm_file}")

    except Exception as e:
        print(f"转换过程中发生错误: {e}")

    finally:
        # 确保 Excel 应用程序退出
        app.quit()

def process_path(path):
    """
    处理单个文件或文件夹中的所有 .xls 文件。

    参数:
        path (str): 输入的文件路径或文件夹路径。
    """
    if os.path.isfile(path) and path.lower().endswith('.xls'):
        convert_xls_to_xlsm(path)
    elif os.path.isdir(path):
        for root, _, files in os.walk(path):
            for file in files:
                if file.lower().endswith('.xls'):
                    convert_xls_to_xlsm(os.path.join(root, file))
    else:
        print(f"{path} 不是有效的 .xls 文件或文件夹。")

if __name__ == "__main__":
    # 确保提供了文件路径
    if len(sys.argv) < 2:
        print("请拖动 .xls 文件或文件夹到此程序上运行。")
        sys.exit(1)

    # 遍历所有传入的文件和文件夹路径
    for path in sys.argv[1:]:
        process_path(path)
